/**
 * 新建tab页
 * 
 * @param title
 *            tab标题
 * @param url
 *            页面URL
 * @param code
 *            tab code
 * @param containerID
 *            容器ID
 * @param closable
 *            是否可关闭
 */
function openTab(title, url, code, containerID, closable) {
	if (containerID == null || containerID == '' || containerID === undefined) {
		containerID = "tabsconetnt";
	}
	var containerObj = $('#' + containerID);
	if (containerObj.tabs('exists', title)) {
		containerObj.tabs('select', title);
	} else {
		var content = '<iframe scrolling="auto" frameborder="0"  src="' + url + '" style="width:100%;height:100%;"></iframe>';
		containerObj.tabs('add', {
			title : title,
			content : content,
			closable : (closable != undefined && closable != null && false == closable) ? false : true
		});
	}
}
/* 获取窗口(windowID 窗口ID) */
function getWindow(windowID) {
	if (windowID == null || windowID == '' || windowID === undefined) {
		windowID = "myWindow";
	}
	var winDiv = $('#' + windowID);
	var winDow = winDiv.find('iframe')[0].contentWindow;
	return winDow;
}
/* 在最上层弹窗 */
function showWindow(windowID, title, href, width, height, maximizable, maximize, minimizable, modal) {
	if (windowID == null || windowID == '' || windowID === undefined) {
		windowID = "myWindow";
	}
	var obj = $('#' + windowID);
	if (obj.length == 0) {
		top.$('body').append('<div id="' + windowID + '" class="easyui-dialog" closed="true"></div>');
		obj = $('#' + windowID);
	}
	obj.window({
		title : title,
		width : width === undefined ? 600 : width,
		height : height === undefined ? 400 : height,
		top : ($(window).height() - height) * 0.5,
		left : ($(window).width() - width) * 0.5,
		content : '<iframe scrolling="auto" frameborder="0"  src="' + href + '" style="width:100%;height:100%;"></iframe>',
		modal : modal === undefined ? true : modal,
		minimizable : minimizable === undefined ? false : minimizable,
		maximizable : maximizable === undefined ? true : maximizable,
		shadow : false,
		cache : false,
		closed : false,
		collapsible : false,
		resizable : false,
		loadingMessage : '正在加载数据，请稍等片刻......'
	});
	if (maximize == 1) {
		obj.window("maximize");
	}
}
/* 关闭弹窗 */
function closeWindow(windowID) {
	if (windowID == null || windowID == '' || windowID === undefined) {
		windowID = "myWindow";
	}
	var obj = $('#' + windowID);
	obj.window('close');
}
/*
 * 弹出消息 alertType:error,question,info,warning
 */
function showMsg(title, msg, isAlert, alertType, width) {
	if (isAlert !== undefined && isAlert) {
		var type = (alertType == undefined || alertType == null || alertType == '') ? "error" : alertType;
		$.messager.alert(title, msg, type);
	} else {
		$.messager.show({
			title : title,
			msg : msg,
			showType : 'show',
			width : width === undefined ? 250 : width
		});
	}
}
/* 弹出错误消息 */
function showErrorMsg(title, data, width, height, modal, minimizable, maximizable) {
	$('#errorWindow').window({
		title : title,
		width : width === undefined ? 700 : width,
		height : height === undefined ? 450 : height,
		content : data + "<div align=\"center\"><a href=\"javascript:void(0);\" class=\"easyui-linkbutton\" plain=\"true\" iconCls=\"icon-cancel\" onclick=\"top.closeErrorWindow();\">关闭</a></div>",
		modal : modal === undefined ? true : modal,
		minimizable : minimizable === undefined ? false : minimizable,
		maximizable : maximizable === undefined ? false : maximizable,
		shadow : false,
		cache : false,
		closed : false,
		collapsible : false,
		resizable : false,
		loadingMessage : '正在加载数据，请稍等片刻......'
	});
}
/* 关闭错误消息窗口弹窗 */
function closeErrorWindow() {
	$('#errorWindow').window('close');
}
/* 确认窗口 */
function showConfirm(title, msg, okCallBack, cancelCallBack) {
	$.messager.confirm(title, msg, function(r) {
		if (r) {
			if (jQuery.isFunction(okCallBack)) {
				okCallBack.call();
			}
		} else {
			if (jQuery.isFunction(cancelCallBack)) {
				cancelCallBack.call();
			}
		}
	});
}
/* prompt */
function showPrompt(title, msg, callback) {
	$.messager.prompt(title, msg, function(r) {
		callback(r);
	});
}
/* 进度条 */
function showProgress(text, interval) {
	$.messager.progress({
		text : text != undefined ? text : $.fn.datagrid.defaults.loadMsg,
		interval : interval != undefined ? interval : 300
	});
}
function hideProgress() {
	$.messager.progress('close');
}

/*---------------------------------------------业务模型引擎 BEGIN----------------------------------------------------*/
/**
 * datagrid column formatter checkbox多选值<br>
 * options 被选值(value1:text1,value2:text2,value3:text3...)<br>
 * value 实际值(value1,value2,value3...)<br>
 * 用于业务模型定义XML文件中，字段格式化formatter中
 */
function getValuesText(options, value) {
	if (options == null || options.trim() == "") {
		return "";
	}
	if (value == null || value.trim() == "") {
		return "";
	}
	/* 备选值 */
	var obj = new Map();
	var result = "";
	var kvs = options.split(",");
	var kvLen = kvs.length;
	for ( var i = 0; i < kvLen; i++) {
		var kv = kvs[i].split(":");
		if (kv.length == 2) {
			obj.put(kv[0], kv[1]);
		}
	}
	/* 实际值 */
	var values = value.split(",");
	var valueLen = values.length;
	var v = "";
	for ( var i = 0; i < valueLen; i++) {
		v = obj.get(values[i]);
		if (v != undefined) {
			result += v + ",";
		}
	}
	if (result.length > 0) {
		result = result.substring(0, result.length - 1);
	}
	return result;
}
/**
 * checkbox勾选值<br>
 * name 多选框的属性name(等于id)<br>
 * value 属性对应的值
 */
function setValuesText(name, value) {
	var values = value.split(",");
	var valueLen = values.length;
	for ( var i = 0; i < valueLen; i++) {
		$("input[name='" + name + "'][type='checkbox'][value='" + values[i] + "']").attr('checked', 'true');
	}
}
/**
 * 业务对象选择<br>
 * fieldCode 字段code<br>
 * fieldTemplateCode 字段模板code
 */
function chooseBD(parentWindowID, fieldCode, fieldTemplateCode, fieldTemplateName, windowWidth, windowHeight, maximizable, maximize) {
	top.showWindow("Choose", "选择 " + fieldTemplateName, "dahua/model/action/BizObjectHandler/choose.ejw?parentWindowID=" + parentWindowID + "&fieldCode=" + fieldCode + "&fieldTemplateCode="
			+ fieldTemplateCode, windowWidth, windowHeight, maximizable, maximize);
}
/**
 * 列表中格式化文件字段
 * 
 * @param value
 *            文件路径，多个以|隔开<br>
 *            单个文件路径由3部分组成(bizCode\{35位的随机文件名}:真实文件名)，例如：(employee\6621839f_1397b3027b5__7ffb_00000014:Activiti 5.8 用户指南（中文版）.pdf) 用于业务模型定义XML文件中，字段格式化formatter中
 * @returns {String}
 */
function getFiles(value) {
	if (value == undefined) {
		return '';
	}
	if (value.length > 0) {
		var files = new Array();
		var paths = value.split(",");
		var fileinfo;
		for ( var i = paths.length - 1; i >= 0; i--) {
			if (paths[i].length == 0)
				continue;
			fileinfo = paths[i].split(":");
			files.push("<a href='dahua/model/action/BizObjectHandler/getFile.ejw?path=" + paths[i] + "' target='blank'>" + fileinfo[1] + "</a>");
		}
		return files.join("<br/>").toString();
	} else {
		return value;
	}
}
/**
 * DATE类型字段模版formatter
 * 
 * @param value
 * @returns {String}
 */
function fmtDateStr(value) {
	if (value != undefined && value.length == 8) {
		return value.substr(0, 4) + "-" + value.substr(4, 2) + "-" + value.substr(6, 2);
	} else {
		return value;
	}
}
/**
 * TIME类型字段模版formatter
 * 
 * @param value
 * @returns {String}
 */
function fmtTimeStr(value) {
	if (value != undefined && value.length == 6) {
		return value.substr(0, 2) + ":" + value.substr(2, 2) + ":" + value.substr(4, 2);
	} else {
		return value;
	}
}
/**
 * DATETIME类型字段模版formatter
 * 
 * @param value
 * @returns {String}
 */
function fmtDateTimeStr(value) {
	if (value != undefined && value.length == 14) {
		return value.substr(0, 4) + "-" + value.substr(4, 2) + "-" + value.substr(6, 2) + " " + value.substr(8, 2) + ":" + value.substr(10, 2) + ":" + value.substr(12, 2);
	} else {
		return value;
	}
}
/**
 * 表单应用<br>
 * 清除普通文本框内容
 * 
 * @param id
 *            组件id
 */
function clearText(id) {
	$('#' + id).val('');
	$('#' + id + '_Text').val('');
}
/**
 * 表单应用<br>
 * 清除日期文本框内容
 * 
 * @param id
 *            组件id
 */
function clearDatebox(id) {
	$('#' + id).datebox('setValue', '');
}
/**
 * 表单应用<br>
 * 清除时间文本框内容
 * 
 * @param id
 *            组件id
 */
function clearTime(id) {
	$('#' + id).timespinner('clear');
}
/**
 * 表单应用<br>
 * 清除下拉框内容
 * 
 * @param id
 *            组件id
 */
function clearCombo(id) {
	$('#' + id).combo('setValue', '');
	$('#' + id).combo('setText', '');
}
/**
 * 是否关闭表单窗口
 */
var closewindow = true;
/**
 * 表单应用<br>
 * 提交表单
 * 
 * @param p_closewindow
 *            是否同时关闭窗口
 */
function save(p_closewindow) {
	closewindow = p_closewindow != undefined ? p_closewindow : true;
	try {
		var keyset = kindeditors.keySet();
		for ( var i = keyset.length - 1; i >= 0; i--) {
			kindeditors.get(keyset[i]).sync();
		}
	} catch (e) {
	}
	$('#myform').submit();
}
/**
 * 表单应用<br>
 * BDSelector回填内容(单选)
 * 
 * @param fieldCode
 *            字段code，用于定位组件
 * @param result
 *            回填数据，有 value 和 text
 */
function doChoose(fieldCode, result) {
	$('#' + fieldCode).val(result.value);
	$('#' + fieldCode + '_Text').val(result.text);
}
/**
 * 表单应用<br>
 * BDSelector回填内容(多选)
 * 
 * @param fieldCode
 *            字段code，用于定位组件
 * @param results
 *            回填数据，有 value 和 text
 */
function doChooseMutiple(fieldCode, results) {
	var values = new Array(results.length);
	var texts = new Array(results.length);
	for ( var i = 0; i < results.length; i++) {
		values[i] = results[i].value;
		texts[i] = results[i].text;
	}
	$('#' + fieldCode).val(values.join(','));
	$('#' + fieldCode + '_Text').val(texts.join(','));
}
/**
 * 表单应用<br>
 * 触发文件上传，点击后弹出文件选择窗口
 * 
 * @param id
 *            文件组件id
 */
function upload(id) {
	$('#' + id).click();
}
/**
 * 表单应用<br>
 * 绑定到了文件组件的onchange事件中，选择文件后触发此函数，用于设置显示文本框的内容
 * 
 * @param fileobj
 *            文件组件
 * @param id
 *            显示文本框id
 * @param multiple
 *            是否支持多文件上传，0否，1是
 */
function setFilePath(fileobj, id, multiple) {
	var value = fileobj.value;
	var accept = $(fileobj).attr('accept');
	var isaccept = true;
	if (accept.length > 0) {
		isaccept = false;
		var acceptFileTypes = accept.toLowerCase().split(",");
		if (value.lastIndexOf(".") != -1) {
			var fileType = value.substring(value.lastIndexOf(".") + 1).toLowerCase();
			for ( var i = acceptFileTypes.length; i >= 0; i--) {
				if (acceptFileTypes[i] == fileType) {
					isaccept = true;
					break;
				}
			}
		}
	}
	if (!isaccept) {
		fileobj.value = '';
		$('#' + id).val('');
		$('#' + id).removeAttr("title");
		top.showMsg('提示', '文件类型不支持，请上传以下文件类型：' + accept, true, 'warning');
		return false;
	}

	value = value.substring(value.lastIndexOf("\\") + 1, value.length);
	$('#' + id).val(value);
	$('#' + id).attr("title", value);
	/* 对于单文件上传，上传新文件之前需要先清除旧的文件 */
	if (multiple == 0) {
		var fielcode = id.substr(0, id.indexOf('_FILENUM_'));
		var filelist0 = $('#' + fielcode + '_FILELIST').children()[0];/* 最多只有一个文件 */
		if (filelist0 != undefined) {
			fileDel($(filelist0).attr('id'), $(filelist0).attr('filestorename'));
		}
	}
}
/**
 * 表单应用<br>
 * 用于清除新上传的文件，只针对第一个文件组件
 * 
 * @param id
 *            第一个文件组件id
 */
function clearFilePath(id) {
	$('#' + id).val('');
	$('#' + id + "_PATH").val('');
	$('#' + id + "_PATH").removeAttr('title');
}
/**
 * 表单应用<br>
 * 用于动态生成文件上传对象，在支持多文件上传的地方用到
 * 
 * @param id
 *            记录当前文件对象数量的组件id
 * @param accept
 *            允许上传的文件类型
 */
function addUpload(id, accept) {
	var index = $('#' + id).val();
	index++;
	$('#' + id).val(index);
	var code = id.substring(0, id.indexOf('_FILENUM'));
	var html = "<div id=\"" + code + "_NEWFILE_" + index + "\">" + "<input id=\"" + code + "_FILENUM_" + index + "\" name=\"" + code + "_FILENUM_" + index
			+ "\" type=\"file\" style=\"display: none;\" onchange=\"setFilePath(this,'" + code + "_FILENUM_" + index + "_PATH',1)\" accept=\"" + accept + "\">" + "<input id=\"" + code + "_FILENUM_"
			+ index + "_PATH\" type=\"text\">" + "<a id=\"" + code + "_FILENUM_" + index
			+ "_UPLOAD\" href=\"javascript:void(0)\" class=\"easyui-linkbutton l-btn l-btn-plain\" plain=\"true\" iconcls=\"ext-icon-upload\" onclick=\"upload('" + code + "_FILENUM_" + index
			+ "');\"><span class=\"l-btn-left\"><span class=\"l-btn-text ext-icon-upload\" style=\"padding-left: 20px; \">上传</span></span></a>" + "<a id=\"" + code + "_FILENUM_" + index
			+ "_REMOVE\" href=\"javascript:void(0)\" class=\"easyui-linkbutton l-btn l-btn-plain\" plain=\"true\" iconcls=\"icon-cancel\" onclick=\"removeFilePath('" + code + "_NEWFILE_" + index
			+ "');\"><span class=\"l-btn-left\"><span class=\"l-btn-text icon-cancel\" style=\"padding-left: 20px; \">清除</span></span></a>" + "</div>";
	$('#' + id).parent().append(html);
}
/**
 * 表单应用<br>
 * 用于清除新上传的文件，针对动态添加的文件组件
 * 
 * @param id
 *            动态添加的文件组件所属层id，方便同时清除相关依赖对象
 */
function removeFilePath(id) {
	$('#' + id).remove();
}
/**
 * 表单应用<br>
 * 用于清除已经上传的文件，只有提交表单后，变更才生效<br>
 * 只用在修改页面中
 * 
 * @param id
 *            文件列表组件id
 * @param path
 *            文件存储路径
 */
function delFile(id, path) {
	top.showConfirm("删除确认", "提交表单后才真正删除文件，确认删除吗?", function() {
		fileDel(id, path);
	});
}
/**
 * 表单应用<br>
 * 用于清除已经上传的文件，只有提交表单后，变更才生效<br>
 * 只用在修改页面中
 * 
 * @param id
 *            文件列表组件id
 * @param path
 *            文件存储路径
 */
function fileDel(id, path) {
	var oldFileID = id.substring(0, id.indexOf('_OLDFILE'));
	var oldFile = $('#' + oldFileID).val();
	var oldPaths = oldFile.split(",");
	var delListID = id.substring(0, id.indexOf('_OLDFILE')) + "_DELLIST";
	var delFile = $('#' + delListID).val();
	var delPaths = delFile.split(",");
	for ( var i = oldPaths.length - 1; i >= 0; i--) {
		if (oldPaths[i].toString().indexOf(path) != -1) {
			delPaths.push(oldPaths[i].split(':')[0]);
			$('#' + delListID).val(delPaths.join(","));

			oldPaths.splice(i, 1);
			$('#' + oldFileID).val(oldPaths.join(","));

			$('#' + id).remove();
			break;
		}
	}
}
/**
 * 表单应用<br>
 * 提交表单后调用，主要处理上传文件
 * 
 * @param parameters
 *            服务端返回的数据，包含表单数据的JSON对象
 */
function afterSave(parameters) {
	var id;
	var index;
	var parameter;
	var delListID;
	var fileListID;
	var newFileID;
	var newPaths;
	var html;
	var fileinfo;
	var filestorename;
	$(':file').each(
			function() {
				id = $(this).attr('id');// PHOTO_FILENUM_0
				index = id.substring(id.lastIndexOf('_') + 1, id.length);
				parameter = id.substring(0, id.indexOf('_FILENUM_'));
				// 设置当前文件路径
				$('#' + parameter).val(parameters[parameter]);

				// 重新生成FILELIST
				fileListID = parameter + '_FILELIST';
				newPaths = parameters[parameter].toString().split('|');
				html = new Array();
				for ( var i = newPaths.length - 1; i >= 0; i--) {
					if (newPaths[i].length == 0)
						continue;
					fileinfo = newPaths[i].split(":");
					filestorename = fileinfo[0].substring('${bizObject.code}'.length + 1, fileinfo[0].length);
					html.push("<div id=\"" + parameter + "_OLDFILE_" + i + "\" filestorename=\""+filestorename+"\"><a href=\"dahua/model/action/BizObjectHandler/getFile.ejw?path=" + newPaths[i] + "\" target=\"_blank\">" + fileinfo[1]
							+ "</a><a href=\"javascript:void(0)\" class=\"easyui-linkbutton l-btn l-btn-plain\" plain=\"true\" iconcls=\"icon-cancel\" onclick=\"delFile('" + parameter + "_OLDFILE_"
							+ i + "','" + filestorename + "');\" id=\"\"><span class=\"l-btn-left\"><span class=\"l-btn-text icon-cancel\" style=\"padding-left: 20px; \">清除</span></span></a></div>");
				}
				$('#' + fileListID).html(html.join(""));

				// 清除选择的文件
				if (index == 0) {
					// 清除第一个FILE组件内容
					clearFilePath(id);
				} else {
					// 移除多余的FILE组件
					newFileID = id.replace('_FILENUM_', '_NEWFILE_');
					removeFilePath(newFileID);
				}

				// 清除删除列表
				delListID = parameter + "_DELLIST";
				$('#' + delListID).val('');
			});
}
/*---------------------------------------------业务模型引擎 END----------------------------------------------------*/


/*---------------------------------------------文件管理 BEGIN----------------------------------------------------*/
var _FILETYPE = "XML|JSP|HTML|TXT|JS|BSH|JAVA|CSS";
/**
 * 判断文件是否支持在线编辑
 */
function canEdit(filename) {
	var suffix = filename.match(/^(.*)(\.)(.{1,8})$/);
	if (suffix == null) {
		return false;
	}
	suffix = suffix[3].toUpperCase();
	if (_FILETYPE.indexOf(suffix) == -1) {
		return false;
	}
	return true;
}
/*---------------------------------------------文件管理 END----------------------------------------------------*/

/*--------------------自定义表单验证方法 BEGIN---------------------------*/

/**
 * 该方法返回True or False 必填项有值时返回true否则返回false，校验数据必须为json格式字符串 数据不得为空
 * 例如：单条“[{'id':'FEEDBACK','name':'FEEDBACK','type':'text','msg':'测试信息'}]”
 * 		多条“[{'id':'FEEDBACK','name':'FEEDBACK','type':'radio','msg':'测试信息'},{'id':'FEEDBACK','name':'FEEDBACK','type':'checkbox','msg':'测试信息'}]”
 */
function validate(jsonString){
	var error_num = 0;
	if(jsonString!=""){
	  var obj = eval( "(" + jsonString + ")" );
	  for(l=0;l<obj.length;l++){
		  var temp = obj[l];
		  if(temp.type.toLocaleLowerCase()=='text'){
			  error_num += textValidate(temp.id,temp.msg);
		  }else if(temp.type.toLocaleLowerCase()=='radio'){
			  error_num += checkboxRadioValidate(temp.id,temp.name,temp.msg);
		  }else if(temp.type.toLocaleLowerCase()=='checkbox'){
			  error_num += checkboxRadioValidate(temp.id,temp.name,temp.msg);
		  } 
	  }
	}
	if(error_num==0){
		return true;
	}else{
		return false;
	}
}
function textValidate(id,msg){
	if($("#"+id).val() != ""){
		return 0;
	}else{
		$("<div id=\"msg_"+id+"\" class=\"validatebox-tip\">"+"<span class=\"validatebox-tip-content\">"+msg+"</span>"+"<span class=\"validatebox-tip-pointer\">"+"</span>"+"</div>").appendTo("body");
		$("#msg_"+id).css({display:"block",left:$("#"+id).offset().left,top:$("#"+id).offset().top+20});
		$("#"+id).focus(function(){
			$("#msg_"+id).remove();
		});
		return 1;
	}
}
function checkboxRadioValidate(id,name,msg){
	 var radios =  document.getElementsByName(name);
	 var isNull = true;
	 for(var i=0;i<radios.length;i++)
     {
		 radios[i].onclick = function(){$("#msg_"+id).remove();};
         if(radios[i].checked==true)
         {
        	 isNull = false;
         }
     }
	if(!isNull){
		return 0;
	}else{
		$("<div id=\"msg_"+id+"\" class=\"validatebox-tip\">"+"<span class=\"validatebox-tip-content\">"+msg+"</span>"+"<span class=\"validatebox-tip-pointer\">"+"</span>"+"</div>").appendTo("body");
		$("#msg_"+id).css({display:"block",left:$("#"+id).parent().offset().left,top:$("#"+id).parent().offset().top+20});
		return 1;
	}
}

function validateMsg(id,visible,msg){
	if(visible==true){
		$("<div id=\"msg_"+id+"\" class=\"validatebox-tip\">"+"<span class=\"validatebox-tip-content\">"+msg+"</span>"+"<span class=\"validatebox-tip-pointer\">"+"</span>"+"</div>").appendTo("body");
		$("#msg_"+id).css({display:"block",left:$("#"+id).parent().offset().left,top:$("#"+id).parent().offset().top+20});
	}else{
		$("#msg_"+id).remove();
	}
}
/*--------------------自定义表单验证方法 end---------------------------*/

